Demandez le programme !

Exprimer un algorithme dans un langage de programmation a pour but de le rendre exécutable par une machine dans un contexte donné. La découverte de l’architecture des machines et de leur système d’exploitation constitue une étape importante.

Architecture de Von Neumann

Architecture de référence

L'architecture générale des ordinateurs a été développée dans le cadre d'un projet EDVAC par John Von Neumann (et d'autres scientifiques de l'époque), mathématicien et physicien américano-hongrois en 1945. Ce modèle propose une structure dans laquelle le programme est stocké dans la mémoire de la machine. On parle maintenant de modèle de Von Neumann.

Vous pouvez faire des recherches autour de noms célèbres de l'informatique :

Vous pouvez également faire des recherches sur les cartes perforées (premières mémoires de masse) qui permettaient de mettre en mémoire les informations pour la machine.

source : wikipedia : carte perforée

Une carte perforée

Un perforateur de carte manuel

Un vérificateur de carte

L’architecture de von Neumann décompose l’ordinateur en 4 parties distinctes :

Architecture de Von Neumann

L'unité de commande et l'unité arithmétique et logique forment l'unité centrale ou l'unité de commande ou plus communément le processeur.

Les ordinateurs actuels reposent toujours sur cette architecture même si désormais les ordinateurs possèdent des processeurs multiples et si les entrées-sorties ne sont plus directement commandées par une unité centrale.

On appelle bus les systèmes permettant le transfert de données entre les différents composants.

Il existe trois grands types de bus :

À ne pas confondre avec la carte mère qui est un circuit imprimé qui supporte et relie tous les composants et les périphériques propres à un ordinateur.

UAL

L'unité arithmétique et logique est le cœur de l'ordinateur. On la représente habituellement par ce schéma (en forme de V) : UAL

source : wikipedia

Supposons une UAL fonctionnant en 8 bits (comme par exemple sur les anciennes Gameboy).

Prenant comme opérande en binaire : $A=10010001$ (soit $A=(145)_{10}$) et $B=10000011$ (soit $B=(131)_{10}$).

Supposons que l'on demande à cette UAL d'effectuer l'addition de ces deux nombres : cette information correspond à $F$.

Mathématiquement, la somme de $A$ et de $B$ vaut 276. Ce nombre s'écrit en binaire $100010100$ ; il faudrait donc 9 bits.
Or, comme l'UAL travaille en 8 bits, le résultat $R$,de taille fixe limitée à 8 bits, correspondra à la somme obtenue mais tronquée en l'octet $00010100$ ; ainsi, $R=00010100=(20)_{10}$ au lieu de $(276)_{10}$.

L'UAL doit indiquer que le résultat renvoyé a été tronqué, c'est-à-dire que l'addition a produit une retenue, le drapeau portera donc cette information (parmi d'autres d'ailleurs).

Mémoire

La mémoire est un tableau dans lequel seront stockés aussi bien les variables que les programmes. Chaque cellule de ce tableau possède une adresse X. Il existe plusieurs façon de noter la valeur rattachée à une adresse X : #X (notation que l'on utilisera dans ce cours) , mais aussi M[X] ou $X.

Voici ci-dessous une représentation d'une mémoire où les adresses sont codées sur 4 bits et les valeurs sur 8 bits.

image fortement modifiée d'une créée par SergeMoutou sur Wikibooks français. — Transféré de fr.wikibooks à Commons., CC BY-SA 3.0, https://commons.wikimedia.org/w/index.php?curid=2067826

À l'adresse X$=0000$ de la mémoire est stocké le nombre entier 161 écrit en binaire, d'où la valeur : #X$=10100001$.

Physiquement, dans un ordinateur, il y a plusieurs types de mémoire ; en voici quatre :

  1. La mémoire interne vive, appelée aussi par l'acronyme anglais RAM pour Random Access Memory : elle est liée directement au processeur qui peut ainsi accéder rapidement (environ 10 nanosecondes) à n'importe quelle donnée enregistrée dessus, sans avoir à lire les données qui précèdent.
    Par contre, dès l'arrêt de l'alimentation ou de l'ordinateur, les données stockées sont perdues : cette mémoire est dite volatile.

  2. La mémoire interne morte, appelée aussi par l'acronyme anglais ROM pour Read Only Memory : elle contient des données fixées lors de leur fabrication et pérennes : cette mémoire est dite permanente. Ces données servent entre autre au bon démarrage d'un ordinateur avec le BIOS.

    Le temps d'accès pour un processeur à cette mémoire est de l'ordre de 150 nanosecondes.

  3. La mémoire externe, comme les disques durs ou les clés USB, qui permettent de stocker à long terme de grandes quantités de données et programme.

    Le temps d'accès pour un processeur varie d'environ 50 microsecondes (pour un disque dur SSD) a quelques millisecondes (pour un disque dur HDD).

  4. Les registres qui sont des emplacements mémoire internes aux processeurs. On considérera surtout ce type de mémoire dans la suite.

    Le temps d'accès est de l'ordre de la nanoseconde.

  5. L'ensemble des différentes mémoires peut être schématisé par une pyramide : à la pointe les mémoires les plus proches du processeur (registres, mémoires caches, ...) et à la base les plus éloignées et avec un temps de transmission de données avec le processeur plus important (disques durs, ...).

Processeur

Le processeur, appelé aussi unité de commande ou unité centrale, dirige le fonctionnement de tous les autres éléments de l'ordinateur.
Outre divers éléments comme une horloge servant à synchroniser différents éléments du processeur, l'unité de commande comporte un ensemble de registres spécialisés qui ne peuvent contenir qu'un type précis de données.
Parmi ces registres, nous allons utiliser les trois suivants :

On peut résumer le fonctionnement du processeur par l'algorithme suivant :

Tant que CO contient des instructions : RI reçoit de la mémoire l'instruction dont l'adresse est contenue dans CO L'instruction chargée dans RI est exécutée. CO est incrémenté de la longueur de l'instruction traitée pour permettre d'accéder à l'instruction suivante

Voici un premier exemple d'instruction : MOV R0 , #8. Cette instruction affecte la valeur 8 au registre R0.

Il faut repérer qu'une instruction possède deux parties : l'opération ou l'instruction et la partie opérandes. Dans notre exemple la partie opération est MOV, et la partie opérandes est R0 , #8.

Comment cette instruction est-elle exécutée ?

  1. phase de recherche : l'instruction est initialement stockée à une adresse donnée de la mémoire ; cette adresse est contenue dans CO.
    On place le contenu de l'instruction dans RI.

  2. phase d'exécution : l'instruction est exécutée : la valeur 8 est affectée au registre R0.

Pour simplifier, ici nous n'avons pas présenté l'augmentation de CO puisque seule une instruction était à effectuer.

Si vous désirez aller plus loin, vous pouvez consulter ce vieux mais détaillé site.

De nos jours, les ordinateurs sont multicoeurs, c'est-à-dire possèdent plusieurs processeurs qui travaillent en parallèles.
Voici un schéma de la structure multiprocesseurs d'un ordianteur puissant datant de 2022 :

Assembleur

Le langage machine est une succession de bits qui est interprétable par le processeur d'un ordinateur.

Comme ces successions de bits sont très peu gérables par un humain, un langage de programmation de bas niveau est nécessaire :

Un langage assembleur est le langage machine machine ou des combinaisons de bits sont représentées par des "symboles" qu'un être humain peut mémoriser.

Un programme assembleur convertit ces "symboles" en la combinaison de bits correspondante pour que le proscesseur puisse traiter l'information.

Un langage assembleur est souvent spécifique un type de processeur.

On considère ici un processeur de type x86.

On veut faire comprendre à un processeur de ce type l'instruction suivante : écrire le nombre 97 dans le registre AL.

Voici comment écrire cette instruction en langage assembleur : movb $0x61,%al.

Pour comprendre :

  1. la partie movb %al signifie écrire dans le registre AL,

  2. la partie $0x61 correspond au nombre 91 écrit en hexadécimal car $(97)_{10}=(61)_{16}$.

Voici comment un programme assembleur va convertir en binaire : 10110000 01100001.

Pour comprendre :

  1. la partie movb %al est codée en 10110000,

  2. le nombre 97, donc le code hexadécimal $0x61, s'écrit en binaire 01100001 car $97=64+32+1$.

En langage assembleur, on peut rencontrer :

  1. des calculs simples (addition, soustraction, multiplication, ...),

  2. des affectations (placer telle valeur de la mémoire vive dans tel registre et vice versa)

  3. des instructions de saut qui permettent de coder des instructions conditionnelles par exemple.

De plus, il y a trois possibilités pour accéder à un opérande (valeur sur laquelle va être opérée une opération) :

Exemples d'utilisation de l'assembleur

Dans les années 40 et 50, les programmes étaient surtout écrits en langage assembleur. Cependant, c'était long, fastidieux et les erreurs étaient fréquentes.

Ensuite, des langages de plus haut niveau ont permis des codes plus simples à écrire et à comprendre par des humains tandis que les progrès des puissances des ordinateurs permettait de compiler ces langages de haut niveau en langage machine en assez peu de temps.

Des programmes tel que le système d'exploitation DOS (le plus utilisé sur PC jusque vers 1990) ou les jeux vidéos pour console comme Super Nintendo ou Mega Drive ont été écrits en langage assembleur.

De nos jours, le langage assembleur peut être encore utilisé dans certaines objet à informatique embarqué ayant une faible mémoire.

Source : "INTERROS des LYCEES-Les VRAIS EXOS donnés dans les lycées"-"numérique et sciences informatiques"-Stéphane PASQUET-Nathan

On imagine un ordinateur constitué d'une mémoire centrale et d'un jeu d'instructions.

Voici le tableau d'instructions :

Instruction Effet
LD X Lit le contenu de la cellule X (ACC ← #X)
STO X Enregistre dans la cellule X (#X ← ACC)
ADD X Ajoute le contenu de la cellule X (ACC ← ACC + #X)
SUB X Soustrait le contenu de la cellule X (ACC ← ACC - #X)
JMP ADR Saute à l'adresse ADR (CO ← A)
JMPZ ADR Saute à l'adresse ADR si nul
JMPP ADR Saute à l'adresse ADR si positif
JMPN ADR Saute à l'adresse ADR si négatif

On considérera qu'un programme commence à l'adresse 8, les adresses 0 à 7 étant réservées au stockage des données.

  1. Voici un exemple de programme :

    Adresse Contenu
    0 25
    1 14
    ..... ......
    8 LD 0
    9 SUB 1
    10 STO 2
    11 END

    Que fait ce programme ?

    Code de déblocage de la correction :

  2. Écrire un programme qui traduit l'expression z = x+x+y.

    On suppose que les variables x et y sont liées aux adresses 0 et 1.

    Code de déblocage de la correction :

  3. Écrire un programme qui écrit le minimum de deux nombres différents.

    considérer le signe de la différence de deux nombres

    Code de déblocage de la correction :

  4. Le programme fonctionne-t-il encore si les deux nombres sont égaux ?

    Code de déblocage de la correction :

exercice de renforcement

Simulateur de CPU

Utilisation

Il existe autant de langages machines que de types de processeurs. Les commandes de base sont assez faciles à transposer d'un langage à l'autre.

Par exemple, l'instruction qui permet de copier le contenu d'un registre dans une mémoire donnée par son adresse peut s'appeler suivant les processeurs STO, STR ou STA.

Afin de pouvoir mieux visualiser le fonctionnement d'un processeur et de pouvoir tester ses lignes de code en langage assembleur, nous allons désormais utiliser le simulateur accessible avec ce lien.

Voici un visuel de ce simulateur :

simulateur

Voici une présentation en vidéo de ce simulateur.

Voici un schéma détaillant les différents éléments de l'architecture de Von Neumann :

architecture

Voici une image d'un simulateur de processeur :

premier programme
  1. Repérer dans le simulateur, les différents éléments spécifiques de l'architecture de Von Neumann.

  2. Repérer dans le simulateur les éléments suivants :

    • Les registres :

      • PC

      • CIR

      • MAR

    • Les entrées.

    • Les sorties.

    • L'Unité Arithmétique et Logique.

    • L'unité de contôle.

    • La mémoire.

Correction : L'exercice précédent est corrigé dans la vidéo ci-dessous vidéo :

Voici un nouvel exercice de programmation en asssembleur. Cependant, le jeu d'instructions n'est pas le même que celui de l'exercice 1 car ce jeu correspond désormais à celui du simulateur précédemment présenté ; dans toute la suite du chapitre, c'est ce jeu d'instructions qui sera utilisé.

Voici le tableau d'instructions de ce simulateur :

Instruction Effet
INP Lire une valeur à partir de la console d'entrée
OUT Ecrire une valeur sur la console d'affichage
ADD Addition
SUB Soustraction
MOV Affectation
LDR Affectation
STR Affectation
B Aller à
HALT Fin du programme
CMP Comparaison
BEQ Comparaison (égalité) puis saut à une adresse
BNE Comparaison (inégalité) puis saut à une adresse
BGT Comparaison (supérieur) puis saut à une adresse
BLT Comparaison (inférieur) puis saut à une adresse
  • pour les instructions de saut, on donnera un label à la place d'une adresse
  • un nombre est précédé d'un # pour le différencier d'une adresse mémoire

Vous pouvez obtenir un détail sur le jeu d'instructions de ce simulateur à cette endroit de la page .

  1. Observer le programme écrit en langage machine :

    premier programme
  2. Indiquer la signification de cette suite d’instructions.

  3. Quel est le contenu de R0,R1,R2 à la fin de ces instructions ?

  4. Que signifie la commande OUT R2,4

Voici une image plus complète du programme dans le simulateur :

premier programme

Correction : L'exercice précédent est corrigé dans la vidéo ci-dessous vidéo :

  1. Écrire en langage assembleur du simulateur le programme suivant :

    x = 15
    y = 12
    z = x - y
    print(z)

    Code de déblocage de la correction :

  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

Penser à faire des copies d'écran et/ou des vidéos de vos programmes. Penser à alimenter votre cahier de bord.

  1. Écrire en langage assembleur du simulateur le programme suivant :

    a = 3
    b = 4
    c = a + b
    print(c)

    Code de déblocage de la correction :

  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

exercice de renforcement

Tester le programme nommé max contenu dans la rubrique SELECT du simulateur.

Correction : L'exercice précédent est corrigé dans la vidéo ci-dessous vidéo :

Voici un script en langage asssembleur :

INP R0,2
INP R1,2
CMP R1,R0
BGT VRAI
OUT R0,4
B DONE
VRAI:
OUT R1,4
DONE:
HALT
            
  1. Essayer de deviner ce que fait ce programme sans lancer le simulateur

    Vous pouvez vous aider du détail sur le jeu d'instructions du simulateur présent à cet endroit de la page .

  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse avec comme saisie 4 puis 8

  3. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse avec comme saisie 7 puis 2

  4. Que fait ce programme écrit en langage assembleur ?

Code de déblocage de la correction :

Dans le langage assembleur, les instructions conditionnelles (si ... alors ... sinon) sont gérées par des sauts vers une partie suivante du programme, saut dans le cas où la valeur stockée dans le registre d'accumulation vérifie une condition.

Bien remarquer que contrairement au langage python où lorsque la condition n'est pas remplie il y a un "saut" vers une partie inférieure du programme, alors qu'en assembleur il y a un "saut" lorsque la condition est remplie :

  1. Écrire en langage assembleur du simulateur le programme suivant :

    x = 15
    y = 12
    if x > y :
    	z = x+y
    else :
    	z = x-y
    print(z)

    Code de déblocage de la correction :

  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

  1. Écrire en langage assembleur du simulateur le programme suivant :

    a = int(input())
    b = int(input())
    c = a + b
    print(c)

    Code de déblocage de la correction :

  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

exercice de renforcement

  1. Écrire en langage assembleur du simulateur le programme suivant :

    
    x = int(input())
    if x > 0 :
        print(x)
    else :
        y = -x
        print(y)
    
    

    Code de déblocage de la correction :

  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

Voici un script en langage asssembleur :

MOV R0,#0	
REP:
CMP R0,#4
BLT VRAI
B DONE
VRAI:
ADD R0,R0,#1
B REP
DONE:
OUT R0,4
HALT
            
  1. Essayer de deviner ce que fait ce programme sans lancer le simulateur

    Vous pouvez vous aider du détail sur le jeu d'instructions du simulateur présent à cet endroit de la page .

  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

  3. Code de déblocage de la correction :

  4. Deviner ce que fait le script si on remplace la première ligne par MOV R0,#5.

  5. Tester le programme modifié en langage assembleur en utilisant le simulateur accessible à cette adresse avec comme saisie 7 puis 2

  6. Modifier le programme initial écrit en langage assembleur afin d'obtenir comme affichage les entiers successifs compris entre 1 et 10.

  7. Code de déblocage de la correction :

Dans le langage assembleur, les instructions répétitives (tant que et pour) sont gérées par des sauts vers une partie précédente du programme, saut dans le cas où la valeur stockée dans le registre d'accumulation vérifie une condition et par un saut final vers la suite du programme pour finir la répétition.

  1. Écrire en langage assembleur du simulateur le programme suivant :

    x = 1
    while x < 6:
       x = x + 2
    print(x)
  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

  3. Code de déblocage de la correction :

  4. Modifier le script obtenu afin d'obtenir comme affichage les nombres pairs compris entre 10 et 20

  5. Code de déblocage de la correction :

Comme une boucle répétitve POUR est une écriture d'une boucle TANT QUE, il est possible d'écrire ce type de boulce répétitive en assembleur.

En assembleur, il est aussi possible de gérer des tableaux (en précisant la taille fixe du tableau puis les données contenues), tout comme gérer des fonctions (en utilisant la pile système et deux instructions PUSH et POP.)

Au niveau du processeur, le jeux d'instructions simples est géré par un ensemble de circuits de transitors créant une combinaison de portes logiques.
Pour plus de détails, veuillez poursuivre au niveau de la partie 4 de cette page.

Jeu d'instructions détaillé

Voici la liste des instructions de ce simulateur, instructions traduites en français :

La liste d'instructions en anglais :

The AQA Instruction Set.

Bascule d'un programme en langage Python en un langage proche de l'assembleur

Saisir dans l'assembleur le code suivant après avoir réglé la mémoire en mode unsigned au niveau du menu déroulant OPTIONS afin de travailler en base 10 :

        
        INP R0, 2
        STR R0, x 
        LDR R0, x
        MOV R1, #2
        ADD R0, R0, R1
        STR R0,x
        HALT
        0
        0
        0
  x:    456
          
    1. Quelle case mémoire du processeur est adressé par x ?

    2. Comment peut-on le voir au niveau du code une fois celui-ci "soumis" ?

    3. Quelle case mémoire du processeur contient l'instruction selon laquelle le nombre 2 est copié dans le registre R1 ?

    4. Sous quelle forme est stockée cette instruction ?

  1. Éxécuter sur l'assembleur le code.

    Comment évolue le contenu de la case adressée par x au cours de l'exécution ?

  2. Que fait le programme écrit en assembleur ?

Un langage compilé est un langage de programmation qui lors de son exécution utilise un compilateur, c'est-à-dire un programme qui traduit le code source écrit dans ce langage de programmation en langage assembleur ou en langage machine afin de créer un programme directement exécutable sur la machine.

Ensuite, c'est ce fichier intermédiaire créé qui est exécuté sur la machine.

Par contre, un langage interprété est un langage de programmation qui lors de l'exécution fait appel à un interpréteur qui va exécuter le programme instruction par instruction ainsi :

  1. lire et analyser l'instruction,

  2. si l'instruction est syntaxiquement correcte dans la langage de programmation, l'exécuter,

  3. passer à l'instruction suivante.

Ici, pas de fichier intermédiaire.

Le langage Python est un langage interpétré un peu hybride, c'est-à-dire que le code en Python est déjà compilé en un bytecode, un code intermédiaire qui n'est pas directement exécutable par un processeur mais qui est ensuite interprété par un interpréteur.

Pour comprendre comment un programme (simple) écrit dans le langage de haut-niveau Python va être traduit en langage machine, il est intéressant d'utiliser le module dis qui permet d'examiner le bytecode intermédiaire.

Voici le code en Python que l'on va étudier :

x = 4
x = x + 5            
                                    

Pour étudier ce code, il suffit d'excuter le code suivant

import dis   # importation du module permettant l'étude
dis.dis('x = 4; x = x + 5; print(x)')
                                    

Voici ce qui est affiché ; c'est le bytecode désassemblé :

  1         0 LOAD_CONST               0 (4)
            2 STORE_NAME               0 (x)
            4 LOAD_NAME                0 (x)
            6 LOAD_CONST               1 (5)
            8 BINARY_ADD
           10 STORE_NAME               0 (x)
           12 LOAD_CONST               2 (None)
           14 RETURN_VALUE

Les lignes affichées ont respectivement la signification suivante :

  1. 0 :Le nombre 4 est stocké dans un registre,

  2. 2 : le contenu de ce registre est copié dans la mémoire au niveau de la case dont l'adresse est x,

  3. 4 : la valeur de x est copiée dans un registre,

  4. 6 : le nombre 5 est copié dans un autre registre,

  5. 8 : l'addition des deux nombres (ceux en haut de la "pile" c'est-à-dire repéés par les nombres 0 et 1 de la troisème colonne),

  6. 10 : le résultat de l'addition est copié dans la mémoire au niveau de la mémoire dont l'adresse est x,

  7. 12 : la valeur None est copiée dans un troisième registre,

  8. 14 : cette valeur None est renvoyée.

Ce code est proche de ce que l'on pourrait écrire dans le langage assembleur du simulateur :

        
            MOV R0, #4
            STR R0, x 
            LDR R0, x
            MOV R1, #5
            ADD R0, R0, R1
            STR R0,x
            HALT
            0
            0
            0
      x:    0
              
  1. Saisir dans l'assembleur le code précédent après avoir réglé la mémoire en mode unsigned au niveau de du menu déroulant OPTIONS afin de travailler en base 10.

  2. Régler la mémoire en mode binary au niveau de du menu déroulant OPTIONS afin de voir comment s'écrirait en langage machine le code initial en Python, sur le type de processeur simulé par le simulateur.

  1. Dans la langage assembleur, supprimer la troisième ligne. Le programme focntionne-t-il encore ?

  2. Rajouter une ligne dans l'assembleur afin que le résultat de l'addition soit renvoyé en sortie.

Prolongement : circuit et fonction booléenne

Transistor

Un processeur est construit de circuits électroniques possédant des transistors jouant le rôle d'interrupteurs.

Le premier transistor a été créé fin 1947 et est à la base de la minuaturation constante des ordinateurs.

Un transistor peut être vu comme un composant électrique à trois fils (électrodes) (le drain, la source et la grille). Suivant la tension appliquée entre la grille et la source, le transistor se comporte un interrupteur isolant ou un conduisant le courant entre la source et la grille :


Voici une animation schématisant avec des fluides ce fonctionnement (Le mot anglais Gate correspond au mot Grille en français) :

Dans l'électronique numérique, des transistors à effet de champ sont utilisés. Leur fonctionnement repose sur la capacité de matériaux semi-conducteur (comme le silicium ou le germanium) à être isolant mais aussi à laisser passer des électrons si une certaine tension est appliquée. On contrôle cette capacité en ajoutant des "impuretés" (on parle de dopage) à ces matériaux de sorte de créer un excédent d'électrons dans le matériau (type n ) ou un déficit (type p).
En mettant en contact des semi-conducteurs dopés différemment, on peut céer deux types de transistors :

Désormais, les transitors sont produits utilisant des procédés photolithographiques.
En 2024, le leader mondial, l'entreprise Taïwanaise TSMC, est capable de produire des transistors de 3 nanomètres avec une densité de plus 215 millions de transistors par millimètres carrés.

Comment calculer et mémoriser avec des transistors ?

Dans le cours sur les booléns, on a vu que les opérations au niveau des processeurs se font avec des portes logique ET, OU, XOR, ...
Toutes ces portes logiques sont construites au niveau des processeurs par la combinaison de transistors.

Si vous désirez comprendre comment il est possible de traduire les calculs logiques et binaires avec des circuits électroniques physiques, vous pouvez lire les pages 167 à 170 du livre en pdf cours se trouvant à cettte adresse ainsi téléchargeable à cette adresse sur le site de l'INRIA.

Les transistors servent aussi à créer des mémoires (cf. lien vers un Wikilivre) :

Exercices de renforcement

Source : "INTERROS des LYCEES-Les VRAIS EXOS donnés dans les lycées"-"numérique et sciences informatiques"-Stéphane PASQUET-Nathan

On imagine un ordinateur constitué d'une mémoire centrale et d'un jeu d'instructions.

Voici le tableau d'instructions :

Instruction Effet
LD X Lit le contenu de la cellule X (ACC ← #X)
STO X Enregistre dans la cellule X (#X ← ACC)
ADD X Ajoute le contenu de la cellule X (ACC ← ACC + #X)
SUB X Soustrait le contenu de la cellule X (ACC ← ACC - #X)
JMP ADR Saute à l'adresse ADR (CO ← A)
JMPZ ADR Saute à l'adresse ADR si nul
JMPP ADR Saute à l'adresse ADR si positif
JMPN ADR Saute à l'adresse ADR si négatif
END Arrêt du programme

On considérera qu'un programme commence à l'adresse 8, les adresses 0 à 7 étant réservées au stockage des données.

  1. Voici un exemple de programme :

    Adresse Contenu
    0 48
    1 37
    ..... ......
    8 LD 0
    9 SUB 1
    10 STO 2
    11 END

    Que fait ce programme ?

  2. Écrire un programme qui traduit l'expression z = x+y

  3. Écrire un programme qui écrit le max de deux nombres

Pour accéder à une correction : sous forme d'une image

  1. Écrire en langage assembleur du simulateur le programme suivant :

    x = 24
    y = 15
    z = 2y
    z = z - x
    print(z) 
  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

Correction de l'exercice : pdf téléchargeable ici.

  1. Écrire en langage assembleur du simulateur le programme suivant :

    a = int(input())
    b = int(input())
    c = a - 2*b
    print(c) 
  2. Tester le programme en langage assembleur en utilisant le simulateur accessible à cette adresse.

Correction de l'exercice : pdf téléchargeable ici.

QCM

Propriétaire des ressources ci-dessous : ministère de l'Éducation nationale et de la jeunesse, licence CC BY SA NC

Voici une sélection de questions issues de la banque nationale de sujets, répondez à ces questions (attention, cette sélection n'est pas exhaustive).

Parmi ces composants électroniques, lequel est d'échelle microscopique dans un ordinateur ?

Réponses :

A- le bus

B- le radiateur

C- le transistor

D- le disque dur

Lequel de ces périphériques n'est pas un périphérique d'entrée ?

Réponses :

A- le moniteur

B- le clavier

C- la souris

D- le scanner

À quoi sert la RAM dans le fonctionnement d'un ordinateur ?

Réponses :

A- à stocker des données lors de l'exécution de programmes

B- à stocker des fichiers

C- à relier les périphériques

D- à accélérer la connexion à Internet

Dans une mémoire RAM, que peut-on faire ?

Réponses :

A- uniquement lire des données

B- uniquement écrire des données

C- lire et écrire des données

D- lire des données même en cas de coupure de courant

Lequel de ces objets n'est pas un périphérique ?

Réponses :

A- le clavier

B- une clé USB

C- la carte graphique

D- la carte mère

Sur un ordinateur, où est stocké de manière permanente le système d'exploitation ?

Réponses :

A- dans la mémoire RAM

B- sur le bus de données

C- sur le disque dur ou le disque SSD

D- dans le Cloud

Quelles sont les quatre parties distinctes de l’architecture de Von Neumann ?

Réponses :

A- L’unité logique, l’unité de contrôle, la mémoire et les dispositifs d’entrée-sortie

B- L’écran, le clavier, le disque dur et le micro-processeur

C- Le disque dur, le micro-processeur, la carte-mère et la carte graphique

D- La mémoire des programmes, la mémoire des données, les entrées-sorties et l’unité logique

Laquelle des mémoires suivantes est volatile ?

Réponses :

A- RAM

B- disque dur

C- ROM

D- clef USB

Dans un ordinateur, que permet de faire la mémoire vive ?

Réponses :

A- Stocker les données de façon permanente

B- Afficher les informations sur l’écran

C- Réaliser les calculs

D- Stocker les données de façon temporaire

Quel composant électronique, inventé vers le milieu du 20e siècle, a permis le développement des ordinateurs actuels ?

Réponses :

A- le condensateur

B- la résistance

C- le transistor

D- la diode

Identifier parmi les éléments suivants celui qui est uniquement un périphérique de sortie.

Réponses :

A- clavier

B- souris

C- écran

D- microphone

Dans l’architecture générale de Von Neumann, la partie qui a pour rôle d’effectuer les opérations de base est :

Réponses :

A- l'unité de contrôle

B- la mémoire

C- l'unité arithmétique et logique

D- les dispositifs d'entrée-sortie

Quelle est la seule affirmation exacte ?

Réponses :

A- la mémoire RAM ne fonctionne qu'en mode lecture

B- la mémoire RAM permet de stocker des données et des programmes

C- une mémoire morte ne peut pas être utilisée

D- la mémoire RAM permet de stocker définitivement des données

Quel est le principal rôle d’une carte mère dans un ordinateur ?

Réponses :

A- stocker les informations en mémoire vive

B- exécuter les instructions en langage machine

C- reproduire le processeur en plusieurs exemplaires

D- connecter les différents composants de l'ordinateur

Savoir faire et Savoir

Sitographie et bibliographie

Licence Creative Commons
Les différents auteurs mettent l'ensemble du site à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International